home *** CD-ROM | disk | FTP | other *** search
/ Trusted Irix /B 4.0.4 / Trusted-Irix B-4.0.1.iso / dist / eoe1.idb / usr / include / sys / IP6.h.z / IP6.h
C/C++ Source or Header  |  1992-04-03  |  14KB  |  364 lines

  1. /**************************************************************************
  2.  *                                      *
  3.  *          Copyright (C) 1987, Silicon Graphics, Inc.          *
  4.  *                                      *
  5.  *  These coded instructions, statements, and computer programs  contain  *
  6.  *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
  7.  *  are protected by Federal copyright law.  They  may  not be disclosed  *
  8.  *  to  third  parties  or copied or duplicated in any form, in whole or  *
  9.  *  in part, without the prior written consent of Silicon Graphics, Inc.  *
  10.  *                                      *
  11.  **************************************************************************/
  12.  
  13. /*
  14.  * ip6.h -- cpu board specific defines for ip6
  15.  */
  16.  
  17. #ifndef __SYS_IP6_H__
  18. #define __SYS_IP6_H__
  19.  
  20. #ident "$Revision: 1.48 $"
  21.  
  22. /*OLSON: next 9 may be able to be removed */
  23. #define    REFRESH_ADDR    0x1fb80004
  24. #define ACR_OFFSET    0x40    /* offset to ACR register        */
  25. #define CTUR_OFFSET    0x60    /* offset to CTUR register        */
  26. #define CTLR_OFFSET    0x70    /* offset to CTLR register        */
  27. #define OPCR_OFFSET    0xd0    /* offset to OPCR register        */
  28. #define RFU_RATE    0x0    /* Upper byte of refresh rate        */
  29. #define RFL_RATE    0x0e    /* Lower byte of refresh rate        */
  30. #define ACR_BITS    0x04    /* bits for ACR register:        */
  31. #define OPCR_BITS    0xe0    /* bits for OPCR register:        */
  32.  
  33. #define    SBE_ADDR    0x1fa40000    /* system bus error address (w)*/
  34.  
  35. #define CPU_CONFIG    0x1f880002    /* Control and status register (h) */
  36.  
  37. /*
  38. ** The led bits use the top bit to indicate if the FPC is installed.
  39. */
  40. #define CONFIG_LEDS    0x001f        /* LED bits on IP4, not used on IP6 */
  41. #define CONFIG_S01    0x0040        /* Enable drive for serial ports 0,1 */
  42. #define CONFIG_S23    0x0080        /* Enable drive for serial ports 2,3 */
  43. #define CONFIG_MAIL    0x0100        /* Enable mailbox interrupts */
  44. #define CONFIG_INIT    0x0200        /* Drive VME SYSRESET (will reset CPU)*/
  45. #define CONFIG_ENPAR    0x0400        /* Enable parity */
  46. #define CONFIG_SLAVE    0x0800        /* Allow Slave accesses to board */
  47. #define CONFIG_ARB    0x1000        /* Enable VME arbiter function */
  48. #define CONFIG_BADPAR    0x2000        /* Write bad parity */
  49. #define CONFIG_DOG    0x4000        /* Enable watchdog timeout */
  50. #define CONFIG_AUX2    0x8000        /* Unused */
  51.  
  52. /*
  53.  * Interrupt enable bits
  54.  * (note: bits set to 1 enable the corresponding level interrupt
  55.  */
  56. #define    SR_ILEVL8    0x00000000    /* mask level 8 */
  57. #define    SR_ILEVL7    0x00008000    /* mask level 7 */
  58. #define    SR_ILEVL6    0x0000c000    /* mask level 6 */
  59. #define    SR_ILEVL5    0x0000e800    /* mask level 5 */
  60. #define    SR_ILEVL4    0x0000f800    /* mask level 4 */
  61. #define    SR_ILEVL3    0x0000f800    /* mask level 3 */
  62. #define    SR_ILEVL2    0x0000fc00    /* mask level 2 */
  63. #define    SR_ILEVL1    0x0000fe00    /* mask level 1 */
  64. #define    SR_ILEVL0    0x0000ff00    /* mask level 0 */
  65.  
  66. #define SR_LCLMASK    0xff000000
  67. #define SR_LCLMASK_POS    24
  68.  
  69. #define LIO_IMASK8    0x00000000    /* Local interrupt mask levels */
  70. #define LIO_IMASK7    0x00000000
  71. #define LIO_IMASK6    0x00000000
  72. #define LIO_IMASK5    0x00000004    /* Only allow retrace */
  73. #define LIO_IMASK4    0x00000004
  74. #define LIO_IMASK3    0x000000ff    /* Allow everything */
  75. #define LIO_IMASK2    0x000000ff
  76. #define LIO_IMASK1    0x000000ff
  77. #define LIO_IMASK0    0x000000ff
  78.  
  79. #define LIO_IMP        (~LIO_VR & 0xff) << SR_LCLMASK_POS
  80.  
  81. #define MEM_CONFIG_ADDR    0x1f800000
  82. #define MCF_4MRAM    0x10
  83. #define MCF_MEMSIZE    0x1f
  84. #define MCF_STALL1    0x40        /* reduces the CAS pulse on reads */
  85.  
  86. /* Local I/O Interrupt Status Register */
  87. #define LIO_ISR_ADDR    0x1f980002    /* Local IO interrupt status (h) */
  88.  
  89. #define LIO_D0        0x001        /* Duart 0 interrupt */
  90. #define LIO_D1        0x002        /* Duart 1 interrupt */
  91. #define LIO_VR        0x004        /* Vertical retrace interrupt */
  92. #define LIO_CENTR    0x008        /* Centronics Printer Interrupt */
  93. #define LIO_SCSI    0x010        /* SCSI interrupt */
  94. #define LIO_ENET    0x020        /* Ethernet interrupt */
  95. #define LIO_GE        0x040        /* GE interrupt */
  96. #define LIO_FIFO    0x080        /* FIFO full interrupt */
  97. #define LIO_AC        0x100        /* VME AC fail interrupt */
  98. #define LIO_VRSTAT    0x200        /* Vert retrace status: no interrupt */
  99.  
  100. /* Local I/O Interrupt Mask Register */
  101. #define LIO_MASK_ADDR    0xbf98000b    /* Local IO mask (b) */
  102.  
  103. #define LIO_D0_MASK    0x001        /* Duart 0 interrupt mask */
  104. #define LIO_D1_MASK    0x002        /* Duart 1 interrupt mask */
  105. #define LIO_VR_MASK    0x004        /* Vertical retrace interrupt mask */
  106. #define LIO_CENTR_MASK    0x008        /* Centronics printer interrupt mask */
  107. #define LIO_SCSI_MASK    0x010        /* SCSI interrupt mask */
  108. #define LIO_ENET_MASK    0x020        /* Ethernet interrupt mask */
  109. #define LIO_GE_MASK    0x040        /* GE interrupt mask */
  110. #define LIO_FIFO_MASK    0x080        /* FIFO full interrupt mask */
  111.  
  112. /* System ID PROM / Coprocessor Present Reg */
  113. #define SYSID        0x1f800001    /* SYSID PROM address (b) */
  114.  
  115. /* The sysid register also contains system status information on IP6 */
  116. #define SID_SERDATA    0x01        /* serial memory data output state */
  117. #define    SID_FPPRES    0x02        /* floating point processor present */
  118. #define SID_SERCLK    0x04        /* serial memory clock */
  119. #define    SID_GDMAERR    0x08        /* error in graphics DMA */
  120. #define SID_GDMAEN    0x10        /* graphics DMA busy */
  121. #define SID_GDMARDY    0x20        /* asserted at end of graphics DMA */
  122. #define SID_GDMARST    0x40        /* asserted in reset of graphics DMA */
  123. #define SID_VMERMW    0x80        /* asserted in vme read-mod-write */
  124.  
  125. /*
  126.  * In addition to RMW_TOGGLE (shared w/IP4 in prom.h), IP6 has strobes
  127.  * to turn on and off the following control bits.
  128.  */
  129. #define GDMA_START_PHYS    0x1fa60008    /* start graphics DMA (b) */
  130. #define GDMA_STOP_PHYS    0x1fa6000c    /* stop graphics DMA (b) */
  131. #define GDMA_RESET_PHYS    0x1fa60010    /* reset graphics DMA (b) */
  132. #define GDMA_UNRES_PHYS    0x1fa60014    /* unreset graphics DMA (b) */
  133. #define SET_SERCLK    0x1fa60018    /* set serial clock (b) */
  134. #define RESET_SERCLK    0x1fa6001c    /* reset serial clock (b) */
  135. #define VR_RESET_PHYS    0x1fac0000    /* reset vert retrace interrupt (b) */
  136. #define    RELOAD_BURST    0x1fa60020    /* reload gfx DMA burst/delay reg (b) */
  137. #define    RAS_DECODER    0x1fa60024    /* address to turn RAS decoder on */
  138. #define INC_CHANNEL    0x1fa60028    /* increment channel (b) */
  139. #define INC_REFRESH    0x1fa6002c    /* increment refresh (b) */
  140. #define INC_TIMER    0x1fa60030    /* increment timer (b) */
  141. #define INC_DABR    0x1fa60034    /* increment DABR (b) */
  142. #define INC_BURST    0x1fa60038    /* increment burst (b) */
  143.  
  144. /* CPU aux control register */
  145. #define    CPU_AUX_CONTROL    0x1f8e0000    /* CPU aux control register (b) */
  146.  
  147. #define    GFX_RESET    0x80        /* Reset graphics subsystem */
  148. #define    CONSOLE_CS    0x20        /* EEPROM (nvram) chip select */
  149. #define    CONSOLE_LED    0x10        /* Console led */
  150. #define    NVRAM_PRE    0x10        /* EEPROM (nvram) PRE pin signal */
  151. #define    CPU_LED        0x0f        /* CPU leds */
  152.  
  153. #define    LED_REG        CPU_AUX_CONTROL
  154. #define    LED_MASK    CPU_LED        /* led bits */
  155.  
  156. #define    LED_HEART    0x01        /* 1 HZ Heartbeat */
  157. #define LED_IDLE    0x02        /* off when cpu is idle */
  158. #define LED_GFX        0x04
  159. #define    LED_CP        0x08        /* on when fpu is present */
  160.  
  161.  
  162. /*
  163.  * Graphics Channel registers and register bits
  164.  */
  165. #define    GDMA_DABR_PHYS     0x1fa40008    /* Descriptor array base reg (w) */
  166. #define    GDMA_BUFADR_PHYS 0x1fa4000c    /* Buffer Address reg (w) */
  167. #define    GDMA_BUFLEN_PHYS 0x1fa40012    /* Buffer Length reg (h) */
  168. #define    GDMA_BURST_PHYS     0x1fa40010    /* Burst/Delay reg (h) */
  169.  
  170. /* These bits are in GDMA_BUFLEN_PHYS reg above */
  171. #define GDMA_HTOG    0x2000        /* DMA Direction bit: 1 = Host to Gfx */
  172. #define GDMA_GTOH    0x0000        /* DMA Direction bit: 0 = Gfx to Host */
  173. #define GDMA_PAUSE    0x4000        /* Pause after channel load (diag) */
  174. #define GDMA_LAST    0x8000        /* Marks last desc array entry */
  175.  
  176. /* Graphics DMA burst & delay periods = ~(register_value) * 100ns */
  177. /* Gets loaded into GDMA_BURST_PHYS reg above 
  178.  * These values reflect RE1 hardware requirements, other RE's are
  179.  * programmed from the master.d file.
  180.  */
  181. #define GDMA_BURST_DEFAULT    0x00    /* burst period = 25.5us */
  182. #define GDMA_DELAY_DEFAULT    0xec    /* bus grant period = 2us */
  183.  
  184. /* Cause a read/modify/write cycle to occur with the next read and write */
  185. #define    VME_RMW_ADDR    0xbfa60000    /* VME RMW toggle */
  186.  
  187. /* Parity Errors */
  188. #define PAR_ERR_ADDR    0x1faa0005    /* Parity error register (b) */
  189.  
  190. #define PAR_LAN        0x01        /* LAN generated error */
  191. #define PAR_DMA        0x02        /* DMA generated error */
  192. #define PAR_CPU        0x04        /* CPU generated error */
  193. #define PAR_VME        0x08        /* VME generated error */
  194. #define PAR_B3        0x10        /* Parity error in byte 3 */
  195. #define PAR_B2        0x20        /* Parity error in byte 2 */
  196. #define PAR_B1        0x40        /* Parity error in byte 1 */
  197. #define PAR_B0        0x80        /* Parity error in byte 0 */
  198.  
  199. #define PAR_CL_LAN_ADDR    0x1faa0000    /* Clear LAN Access bit (b) */
  200. #define PAR_CL_DMA    0x1faa0001    /* Clear DMA Access bit (b) */
  201. #define PAR_CL_CPU    0x1faa0002    /* Clear CPU Access bit (b) */
  202. #define PAR_CL_VME    0x1faa0003    /* Clear VME Access bit (b) */
  203.  
  204. /* SCSI Control */
  205. #define NMAPREG        256    /* how many pages can be mapped for DMA */
  206.  
  207. #define    SCSI_INIT_ADDR    0xbfa80004    /* Activate master reset on chip */
  208. #define    SCSI_RDY_ADDR    0xbfa80000    /* Deactivate master reset on chip */
  209. #define SCSI0_ADDR    0xbfb00001    /* SCSI WD33C93 address register */
  210. #define SCSI1_ADDR    0xbfb00101    /* SCSI WD33C93 data register */
  211. #define SCSI_DMALO_ADDR    0xbf900002    /* Low address register (h)*/
  212. #define SCSI_DMAHI_ADDR    0xbf920002    /* High address register array (16h)*/
  213. #define SCSI_DMAHI_ADDR    0xbf920002    /* High address register array (16h)*/
  214. #define    SCSI_FLUSH_ADDR    0xbf940000    /* DMA flush bytes to memory */
  215.  
  216. #define SCSI_TO_MEM    0x80        /* transfer in */
  217.  
  218. #define IOC2CONFIG    0x1fa80008    /* configuration register for Rev 2 IOC
  219.     chip;  all bits RO, except BURST, NOSYNC, and HIWAT. Probing this
  220.     address on IOC rev 1 gets a bus error. The ID bits are 0 for Rev 2.
  221.     HIWAT:0-3 ID:4-5 NOSYNC:6 BURST:7 COUNT:8-14 RESERV:15
  222.     SCP:16-21 RESERV:22-27 IOP:28-31 */
  223.  
  224. /* Clock and timer addresses */
  225. #ifdef LANGUAGE_ASSEMBLY    /* used by some standalone assembler routines */
  226. #define    PT_CLOCK_ADDR    PHYS_TO_K1(0x1fb40000)
  227. #else
  228. #define    PT_CLOCK_ADDR    (struct pt_clock *)PHYS_TO_K1(0x1fb40000)
  229. #endif
  230. #define    TIM0_ACK_ADDR    (char *)PHYS_TO_K1(0x1fa20000)
  231. #define    TIM1_ACK_ADDR    (char *)PHYS_TO_K1(0x1fa00000)
  232.  
  233. #ifdef LANGUAGE_C
  234. #define RT_CLOCK_ADDR    (struct dp8573_clk *)PHYS_TO_K1(0x1fbc0000)
  235. #else 
  236. #define RT_CLOCK_ADDR    PHYS_TO_K1(0x1fbc0000)
  237. #endif
  238.  
  239. /*
  240.  * VIP10 location monitor related defines
  241.  */
  242. #define LM_PRIO         7               /* VME interrupt prio usurped by lm */
  243. #define LM_IC           0x1F8C0000      /* Interrupt clear address*/
  244.  
  245.  
  246. /*
  247.  * VMEbus related defines
  248.  */
  249.  
  250. /*
  251.  * VME interrupt control registers
  252.  */
  253. #define    VME_IMR        0x1f84000b    /* interrupt mask */
  254. #define    VME_ISR        0x1f840003    /* interrupt status */
  255. #define    VME_IACK    0x1df00002    /* interrupt acknowledge */
  256.  
  257. /*
  258.  * VME I/O space defines
  259.  */
  260. #define    VME_A16NPBASE    0x1d100000    /* a16 non-privileged address sp */
  261. #define VME_A16NPSIZE    0x00010000    /* size */
  262.  
  263. #define    VME_A16SBASE    0x1d000000    /* a16 supervisor address sp */
  264. #define VME_A16SSIZE    0x00010000    /* size */
  265.  
  266. #define    VME_A24NPBASE    0x1e000000    /* a24 non-privileged address sp */
  267. #define VME_A24NPSIZE    0x01000000    /* size */
  268.  
  269. #define    VME_A24SBASE    0x1c000000    /* a24 supervisor address sp */
  270. #define VME_A24SSIZE    0x01000000    /* size */
  271.  
  272. #define    VME_A32NPBASE    0x10000000    /* a32 non-privileged address sp */
  273. #define VME_A32NPSIZE    0x0c000000    /* size */
  274.  
  275. #define    VME_A32SBASE    0x0        /* a32 supervisor address sp */
  276. #define VME_A32SSIZE    0x0        /* size */
  277.  
  278. #define vme_adapter(addr) 0        /* only 1 VME adapter */
  279.  
  280.  
  281. #ifdef LANGUAGE_C
  282. /*
  283.  * Graphics DMA channel descriptor array element.
  284.  */
  285. typedef struct gdmada {
  286.     long *bufaddr;
  287.     long dmactl;
  288. } gdmada_t;
  289.  
  290. /*
  291. ** local interrtupt table vector numbers for use with setlclvector()
  292. */
  293. #define VECTOR_GFX_FIFO        7
  294. #define VECTOR_GFX_RETRACE    2
  295. #define VECTOR_GFX_GE        6
  296.  
  297. typedef struct scuzzy {
  298.     u_char        *d_addr;    /* address register */
  299.     u_char        *d_data;    /* data register */
  300.     unsigned char d_initflags;    /* initial flags for d_flags */
  301.     unsigned char d_clock;    /* value for clock register on WD chip */
  302. } scuzzy_t;
  303.  
  304. #if defined(STANDALONE)
  305. typedef struct int_tbl {
  306.     int    (*i_hndlr)();
  307.     int    i_arg;
  308. } int_tbl_t;
  309.  
  310. extern int_tbl_t lclvec_tbl[];
  311. #endif
  312.  
  313. #endif /* LANGUAGE_C */
  314.  
  315. /* CPU aux control register */
  316. #define    SERCLK        0x40        /* serial clock signal */
  317. #define SERDATA        0x01        /* EEPROM (nvram) serial input bit */
  318.  
  319. #define    FPU_PRESENT    0x02        /* FP coprocessor present */
  320.  
  321. #define BSR_SERDATA    0x0100        /* Serial memory data input */
  322. #define BSR_INIT    0x0200        /* Drive VME SYSRESET (will reset CPU)*/
  323. #define BSR_ENPAR    0x0400        /* Enable parity */
  324. #define BSR_SLAVE    0x0800        /* Allow Slave accesses to board */
  325. #define BSR_ARB        0x1000        /* Enable VME arbiter function */
  326. #define BSR_BADPAR    0x2000        /* Write bad parity */
  327. #define BSR_DOG        0x4000        /* Enable watchdog timeout */
  328. #define BSR_FPER    0x8000        /* Fast peripheral cycle */
  329.  
  330. #define MCF_TIMERDIS    0x20        /* reduces the peripheral r/w strobe */
  331. #define MCF_FMEM    0x40        /* reduces the CAS pulse on reads */
  332. #define MCF_REFDIS    0x80        /* disable memory refresh */
  333.  
  334. #define PAR_CL_GDMA    0x1faa0000    /* Clear GDMA parity error bit (b) */
  335.  
  336. /* Control opcode for nonvolatile ram on IP6 (should be put somewhere else) */
  337. #define SER_READ    0xc000        /* serial memory read */
  338. #define SER_WEN        0x9800        /* write enable before prog modes */
  339. #define SER_WRITE    0xa000        /* serial memory write */
  340. #define SER_WDS        0x8000        /* disable all programming */
  341. #define SER_WRALL    0x8800        /* write all registers */
  342. #define    SER_PRCLEAR    0xffff        /* clear protect register */
  343.  
  344. #define    LCA_READBACK    0x1f8c0000    /* LCA array readback trigger (b) */
  345. #define    REFRESH_TIMER    0x1fa40004    /* Refresh timer/counter (w) */
  346.  
  347. #if defined(STANDALONE) || defined(LOCORE) || defined(PROM)
  348. #include <sys/IP6nvram.h>    /* NVRAM stuff for IP6 standalone */
  349. #endif
  350.  
  351. /* Address definitions */
  352. #define    SYMMON_STACK        0xa0003000
  353. #define    PROM_STACK        0xa0400000
  354. #define PROM_CHILD_STACK    0xa037fffc /* SASH's stack is 16k max. */
  355. #define    RESTART_ADDR        0xa0000400
  356.  
  357. /* Size definitions */
  358. #define SYMMON_PDASIZE        512    /* size per CPU */
  359.  
  360. #define    dcache_wb(X,Y)
  361. #define    dcache_wbinval(X,Y)    dcache_inval(X,Y)
  362.  
  363. #endif /* __SYS_IP6_H__ */
  364.